Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Jak zrobić żeby nie liczyło pola, gdy zostaje podana liczba ujemna


Rekomendowane odpowiedzi

Opublikowano

Chce zrobic obliczenie pola kwadartu w case z zabezpieczeniem (for)
ale wgl to nie działą raz po wpisaniu ujemnej liczy mi pole :/

 

#include <iostream>

using namespace std;

int main()
{
    int wyborMenu;
    int kwadratWynik;
    int kwadratBok ;

    cout << "===Wybierz co obliczyc===" << endl;
    cout << "1. Pole Kwadratu" << endl;
    cout << "Wybor: ";
    cin >> wyborMenu;


    switch(wyborMenu)
    {
        case 1:
            {
                cout << "Podaj dlugosc boku:";
                for( ; kwadratBok > 0 ; )
                {
                    cin >> kwadratBok;

                }

                kwadratWynik = kwadratBok*kwadratBok;
                cout << "Wynik: " << kwadratWynik;


            }

    }
    return 0;
}

 

 

Pomogłem daj Like


Opublikowano

Pętla for nie jest tu żadnym zabezpieczeniem. Poczytaj więcej na jej temat.

Tutaj użyj instrukcji warunkowej if.

if (kwadratBok > 0) {
      // dalsza część kodu
}

else {
     cout << "Blad. Liczba musi byc dodatnia";
}

http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Instrukcja-warunkowa-if-else/16

http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Petla-for/294

it's not who i am underneath

but what i do that defines me.

Opublikowano

Zacznijmy od tego, że nie do końca wiesz co robisz. Na sam początek poczytaj sobie co to są pętle i do czego one służą. 

 

Obejrzyj sobie ten filmik jak gość weryfikuje dane wprowadzane przez użytkownika

 

@554461402688252517908.png LittleBlack

Sama instrukcja warunkowa jest mało praktyczna, ponieważ w przypadku podania nie tego co chcemy użytkownik musi zaczynać wszystko od nowa :P. Używając pętli while (jak w filmiku powyżej) użytkownik będzie miał szanse poprawić swój błąd podając np. liczbę dodatnią czy cokolwiek chcemy :P.

Opublikowano

Kurde ale ja chce zrobic coś takiego 
ze jak bedzie ujemna  to zeby musieć wpisywać jeszcze raz
 

Pomogłem daj Like


Opublikowano

mogę zapytać, jakiego kompilatora używasz? każdy cywilizowany kompilator powinien ci wyrzucić warning/error że używasz uninitialized variable.

 

zrób tak:

do
{
    cout << "Podaj dlugosc boku: ";
    cin >> kwadratBok;
} while (kwadratBok < 0);

Skończ proszę się kompromitować. Jesteś nikim.

Opublikowano

Robisz pętle while z warunkiem kwadratBok > 0. Prosisz użytkownika o podanie boku kwadratu, if'em sprawdzasz co tam użytkownik zarzucił i decydujesz co robić dalej :P.

Opublikowano

Kurde ale ja chce zrobic coś takiego 

ze jak bedzie ujemna  to zeby musieć wpisywać jeszcze raz

 

Więc użyj while, tak jak mówi @Wolen.

 

While działa na zasadzie "dopóki warunek nie zostanie spełniony, wykonuj instrukcje", więc w Twoim kodzie byłoby to:

cin >> kwadratBok;    // wczytaj długość boku
while (kwadratBok <= 0){        // wykonuj instrukcje w pętli, dopóki warunek nie zostanie spełniony
    cin >> kwadratBok; 
}
// wykonuj dalsze instrukcje (oblicz pole)

it's not who i am underneath

but what i do that defines me.

Opublikowano

Działa dzięki wszystkim :P
Mam takie pytanie teraz z innej beczki :P 
co jest to możliwe ze jak wpisywałem tak jak @554461402688252517908.png LittleBlack while() {} i nie działa a jak zorbie tak jak @ᕦ-͡°-͜ʖ-͡°ᕤ z do while to działa to wina kompilatora ?

 

 

mogę zapytać, jakiego kompilatora używasz? każdy cywilizowany kompilator powinien ci wyrzucić warning/error że używasz uninitialized variable.

 

 

Kompilator GNU GCC Compiler (CodeBlocks)

Pomogłem daj Like


Opublikowano

Działa dzięki wszystkim :P

Mam takie pytanie teraz z innej beczki :P 

co jest to możliwe ze jak wpisywałem tak jak @554461402688252517908.png LittleBlack while() {} i nie działa a jak zorbie tak jak @ᕦ-͡°-͜ʖ-͡°ᕤ z do while to działa to wina kompilatora ?

 

Kompilator GNU GCC Compiler (CodeBlocks)

http://prntscr.com/a1wbgu - U mnie działa wersja moja i @554461402688252517908.png LittleBlack - wersja moja po prostu pokazuje komunikat jeszcze raz.

Też użyłem g++, wersja 4.4.1

Skończ proszę się kompromitować. Jesteś nikim.

Opublikowano

Działa dzięki wszystkim :P

Mam takie pytanie teraz z innej beczki :P 

co jest to możliwe ze jak wpisywałem tak jak @554461402688252517908.png LittleBlack while() {} i nie działa a jak zorbie tak jak @ᕦ-͡°-͜ʖ-͡°ᕤ z do while to działa to wina kompilatora ?

 

Kompilator GNU GCC Compiler (CodeBlocks)

Dałam Ci tylko pseudokod, a Ty pewnie skopiowałeś wszystko nawet dobrze nie czytając. :P Brakuje w nim przede wszystkim komunikatów dla użytkownika wypisywanych na ekran. Kod (prawdopodobnie) działa. Tu nie chodzi o zmienne, bo zarówno u mnie, jak i w drugiej wersji, zmienne są użyte tak samo.

 

Błąd, o którym pisał @1373230489-U611928.pngᕦ( ͡° ͜ʖ ͡°)ᕤ występuje tutaj:

    int wyborMenu;
    int kwadratWynik;
    int kwadratBok;

Dobrym nawykiem programisty jest inicjalizacja zmiennych, czyli nadanie im wartości początkowych. https://pl.wikipedia.org/wiki/Inicjalizacja_zmiennej

it's not who i am underneath

but what i do that defines me.

Opublikowano

@LittleBlack 
Jeju naprawde sprawiam wrażenie takiego amatora ? zmienne miałem cały czas aż taki zielony to nie jestem typy zmiennych mam juz za sobą dawno obsługe strumienia tez (czysczenie itp)
aktualnie w sql jesteśmy na etapie for() i to trochę sprawia mi trudności 
Ale Wielkie dzięki za troskę  !!!!
No moje wypociny:


 

#include <iostream>
#include <Windows.h>

using namespace std;

int main()
{
    int wyborMenu;
    int kwadratWynik;
    int kwadratBok ;
    char kontynuacja;

do
{
    system("cls");
    cout << "===Wybierz co obliczyc===" << endl;
    cout << "[1] Pole Kwadratu" << endl;
    cout << "Wybor: ";
    cin >> wyborMenu;





    switch(wyborMenu)
    {
        case 1:
            {
                system("cls");
                cout << "=== Obliczanie pola kwadartu ===" << endl;
                cout << "Podaj dlugosc boku: ";
                cin >> kwadratBok;
                cout << endl;
                if(kwadratBok > 0)
                {
                    kwadratWynik = kwadratBok*kwadratBok;
                    cout << "Pole kwadratu wynosi: " << kwadratWynik << endl;
                }
                else
                {
                    do
                    {
                        cout << "Dlugosc nie moze miec wartosci ujemnej!!!!" << endl;
                        cout << "Podaj dlugosc boku jeszcze raz !! : ";
                        cin >> kwadratBok;
                        cout << endl;

                    }while (kwadratBok < 0);
                    kwadratWynik = kwadratBok*kwadratBok;
                    cout << "Pole kwadratu wynosi: " << kwadratWynik << endl;
                }
                break;


            }

    }

    cout << "Czy chcesz kontynuowac? (T/N): ";
    cin >> kontynuacja;
} while (   kontynuacja=='t' || kontynuacja=='T'  );


    return 0;
}

 



 

Pomogłem daj Like


Opublikowano

@ThePrzemocz98

Nie do końca chyba zrozumiałeś sentencje @LittleBlack. Nie chodzi o deklaracje, lecz o inicjalizacje zmiennej. Jaka jest różnica?

int Liczba; //Deklaracja
Liczba = 1; //Inicjalizacja lub po prostu przypisanie/zmiana wartości, można zrobić tylko na już zdeklarowanych zmiennych
int Liczba = 1; //Deklaracja wraz z inicjalizacją

LB miała na myśli, że dobrą praktyką jest inicjalizacja zmiennej na samym początku gdy ją deklarujemy (ostatni przykład powyżej). Domyślnie dla intów przypisuje się 0, dla stringów pusty ciąg, dla logicznych false (chociaż true też można).  To, że przerobiłeś typy zmiennych i podstawy I/O nie robią z Ciebie programisty, nie wiem skąd taka reakcja i wyjechanie z amatorem. Pętle to są jedne z pierwszych tematów przy normalnym toku nauki. Jeśli ktoś bardziej doświadczony daje Ci rady to przeczytaj to uważnie i nie reaguj od razu, że każdy ma Cię za amatora. Jesteś amatorem, ale na litość boską, każdy kiedyś zaczynał i to nie jest nic złego, nie warto traktować słowa 'amator' jak obelgi.

Opublikowano

jeszcze coś ode mnie

1: nie używaj system("cls"), w ogóle nie używaj system(), nie masz tutaj po co

2: niepotrzebnie dołączasz Windows.h

3: nie używaj using namespace std; i pisz std::cout, std::cin - im wcześniej się odzwyczaisz od using namespace, tym lepiej

Skończ proszę się kompromitować. Jesteś nikim.

Opublikowano

Jaki sens ma tutaj inicjalizowanie zmiennej kwadratBok?! Ona powinna być zadeklarowana bliżej miejsca użycia, a wtedy jaki sens ma inicjalizacja zmiennej, która jest nadpisywana w następnej linii..

 

Wystarczyło lekko zmienić jego kod, a wy się mądrzycie nie wiadomo nad czym.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...